package com.itheima.advance.xml.parse;

import com.itheima.advance.xml.domain.Student;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;

/**
 * students.xml文件的解析类
 */
public class StudentXmlParase {

    // 定义students.xml文件的路径
    public static final String STUDENTS_XML_PATH = "itheima-advance-xml\\xml\\students.xml" ;

    public static void main(String[] args) {

        // 1. 创建解析器
        SAXReader saxReader = new SAXReader() ;

        try {

            // 2. 通过解析器读取xml文档数据，得到Document对象
            Document document = saxReader.read(new FileInputStream(STUDENTS_XML_PATH));

            // 3. 获得跟节点元素对象
            Element rootElement = document.getRootElement();

            // 4. 从跟节点下查找其他的节点元素，读取数据 , 去获取根节点元素对象下所有的student元素对象
            List<Element> studentElements = rootElement.elements("student");

            // 创建一个ArrayList集合存储多个学生对象
            ArrayList<Student> arrayList = new ArrayList<Student>() ;

            // 5. 遍历上面的List集合，获取每一个student元素对象
            for(Element element : studentElements) {

                // 获取student元素对象上的属性
                Attribute attribute = element.attribute("id");
                String id = attribute.getValue();// 获取id属性的值

                // 获取name子节点
                Element nameElement = element.element("name");
                String name = nameElement.getText();                // 获取name标签体的内容

                // 获取age子节点
                Element ageElement = element.element("age");
                String age = ageElement.getText();                   // 获取age标签体的内容

                // 获取address子节点
                Element addressElement = element.element("address");
                String address = addressElement.getText();                // 获取address标签体的内容

                // 创建一个学生对象，把数据封装到学生对象中
                Student student = new Student() ;
                student.setStuId(id);
                student.setStuName(name);
                student.setStuAge(age);
                student.setStuAddress(address);

                // 把学生对象添加到arrayList集合中
                arrayList.add(student) ;

            }

            // 遍历arrayList
            arrayList.forEach( s -> System.out.println(s));

        } catch (Exception e) {
            e.printStackTrace();
        }



    }

}
